Skip to main content

4-5 67. 二进制求和

Date:2022-04-05 09:32:22

题目:67. 二进制求和 ( 简单😄 )

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 10

示例

示例1:

输入: a = "11", b = "1"
输出: "100"

示例2:

输入: a = "1010", b = "1011"
输出: "10101"

分析

  • 模拟

    先补位,再从后向前相加

      10101
    + 00010
    = 10111

重点:

  • 取当前位的值

    (carry + a + b) % 2

  • 取当前进位

    (carry + a + b) / 2(注意向下取整)

题解

模拟

function addBinary(a: string, b: string): string {
const lenA = a.length,
lenB = b.length
let max = 0

if (lenA > lenB) {
max = lenA
b = b.padStart(lenA, '0')
} else {
max = lenB
a = a.padStart(lenB, '0')
}

let carry = 0,
ans = ''
for (let i = max - 1; i >= 0; --i) {
const sum = carry + Number(a.charAt(i)) + Number(b.charAt(i))
ans = String(sum % 2) + ans

carry = Math.floor(sum / 2)
}

return carry == 0 ? ans : String(carry) + ans
}

使用

function main() {
const a = '11',
b = '1'
// const a = '1010',
// b = '1011'

console.log('[]:', addBinary(a, b))
}

main()